package com.xiaotu.storage;

import java.util.Date;
import java.util.stream.Stream;

import org.springframework.stereotype.Component;

import com.xiaotu.common.util.Constants;
import com.xiaotu.common.util.DataRedisKeyUtils;
import com.xiaotu.common.util.SepratorUtil;
import com.xiaotu.storage.converter.AConverter;
import com.xiaotu.storage.converter.ConverterFactory;
import com.xiaotu.storage.model.CacheDataModel;

import net.sf.json.JSONObject;

/***
 * 猫眼电影票房明细
 * @author Mr.zhang
 *
 */
@Component("MaoYanMovieBoxofficeDetailStorageProcessor")
public class MaoYanMovieBoxofficeDetailStorageProcessor extends AHSetStorageProcessor {

	private static final String[] FIELD_ARR = new String[]{
			"id","tvname",
			"dataid", "siteName", "playDate",
            "playWeekDate","broadCastType","splitBox","splitBoxRatio",
            "splitTicketPrice","sliceRatio","largeScaleRefund","largeScaleRefundRatio",
            "maoYanRefund","maoYanRefundRatio","avgNum","netSaleRatio","goldenRatio",
            "screen","seatRatio","seatNum","totalBox","totalBoxRatio",
            "totalTicketPrice","collectTime"};
	
	
    private static final String[] CONVERT_ARR = new String[]{
 		AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,
 		AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,
 		AConverter.STRING_CONVERT,AConverter.STRING_CONVERT,AConverter.NUMBER_CONVERT,
 		AConverter.RATE_CONVERT,AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.NUMBER_CONVERT,AConverter.RATE_CONVERT,
 		AConverter.NUMBER_CONVERT,AConverter.TIMESTAMP_CONVERT
    	};
	
	
    private static final boolean[] THROW_ARR = new boolean[]{
    		true,true,true,true, true, true, true, true,
    		true,true, true, true, true, true, true, true, 
    		true, true, true, true, true, true, true, true,
    		true};
	
	
	@Override
	protected String getRedisKey(Date date) {
		return DataRedisKeyUtils.getKey(Constants.DataRedisKey.MAOYAN_MOVIE_BOX_DETAIL_YYYYMMDD, date);
	}

	@Override
	public String process(JSONObject target, CacheDataModel cacheData, Date date) {
        Stream.of(FIELD_ARR).forEach(field ->
        {
        	Stream.of(FIELD_ARR).forEach(filed -> {
        		target.put(filed, target.get(filed).toString().replaceAll("[<>-]", "").trim());
        	});
        });
        return this.list2CSVLine(ConverterFactory.convert(target, FIELD_ARR, CONVERT_ARR,
                THROW_ARR), SepratorUtil.SEP_PIPE);
	}

	@Override
	public String getDataType() {
		return Constants.PageDataType.TV_RECORD;
	}

	@Override
	public String getTaskType() {
		return Constants.SpiderTaskType.MOVIE_BOXOFFICE;
	}
	
}
